package com.wjw.java.collection.generic;

/**
 * 自定义泛型类：
 * class 类名<K,V...>{
 *
 * }
 *
 * 细节
 * 1.属性和方法可以使用泛型
 * 2.使用泛型的数组不能初始化
 * 3.静态方法中不能使用泛型
 * 4.泛型的类型,是在创建对象时确定的
 * 5.如果在创建对象时,没有指定类型,默认为Object
 */
public class Custom_Generic_Class {
    public static void main(String[] args) {
        Tiger<String,Double> tiger = new Tiger("跳跳虎","男",0.6);
        System.out.println(tiger);
    }
}
class Tiger<K,V>{
    //属性使用泛型
    private String name;
    private K k;
    private V v;

    //错误,使用泛型的数组不能初始化,因为没有确定类型时,无法开辟内存空间
    //private K [] ks = new K[8];

    //错误,因为静态是和类相关的,在类加载的时候,对象还没创建(没有new)
    //而泛型的类型,是在创建对象时确定的,此时JVM无法完成初始化
    //public static K key;
    /*public static void show(K k, V v){

    }*/

    //方法使用泛型
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public K getK() {
        return this.k;
    }

    public void setK(K k) {
        this.k = k;
    }

    public V getV() {
        return this.v;
    }

    public void setV(V v) {
        this.v = v;
    }

    //构造器使用泛型
    public Tiger(String name, K k, V v) {
        this.name = name;
        this.k = k;
        this.v = v;
    }
}
